Python中一种简单的动态图表制作方法

您所在的位置:网站首页 python 数据图表 Python中一种简单的动态图表制作方法

Python中一种简单的动态图表制作方法

#Python中一种简单的动态图表制作方法| 来源: 网络整理| 查看: 265

在读技术博客的过程中,我们会发现那些能够把知识、成果讲透的博主很多都会做动态图表。他们的图是怎么做的?难度大吗?这篇文章就介绍了 Python 中一种简单的动态图表制作方法。

83b42286-5fd2-11eb-8b86-12bb97331649.gif

数据暴增的年代,数据科学家、分析师在被要求对数据有更深的理解与分析的同时,还需要将结果有效地传递给他人。如何让目标听众更直观地理解?当然是将数据可视化啊,而且最好是动态可视化。 本文将以线型图、条形图和饼图为例,系统地讲解如何让你的数据图表动起来。

84f19dcc-5fd2-11eb-8b86-12bb97331649.gif

这些动态图表是用什么做的? 接触过数据可视化的同学应该对 Python 里的 Matplotlib 库并不陌生。它是一个基于 Python 的开源数据绘图包,仅需几行代码就可以帮助开发者生成直方图、功率谱、条形图、散点图等。这个库里有个非常实用的扩展包——FuncAnimation,可以让我们的静态图表动起来。 FuncAnimation 是 Matplotlib 库中 Animation 类的一部分,后续会展示多个示例。如果是首次接触,你可以将这个函数简单地理解为一个 While 循环,不停地在 “画布” 上重新绘制目标数据图。 如何使用 FuncAnimation? 这个过程始于以下两行代码:

importmatplotlib.animationasani animator=ani.FuncAnimation(fig,chartfunc,interval=100) 从中我们可以看到 FuncAnimation 的几个输入:

fig 是用来 「绘制图表」的 figure 对象;

chartfunc 是一个以数字为输入的函数,其含义为时间序列上的时间;

interval 这个更好理解,是帧之间的间隔延迟,以毫秒为单位,默认值为 200。

这是三个关键输入,当然还有更多可选输入,感兴趣的读者可查看原文档,这里不再赘述。 下一步要做的就是将数据图表参数化,从而转换为一个函数,然后将该函数时间序列中的点作为输入,设置完成后就可以正式开始了。 在开始之前依旧需要确认你是否对基本的数据可视化有所了解。也就是说,我们先要将数据进行可视化处理,再进行动态处理。 按照以下代码进行基本调用。另外,这里将采用大型流行病的传播数据作为案例数据(包括每天的死亡人数)。

importmatplotlib.animationasani importmatplotlib.pyplotasplt importnumpyasnp importpandasaspdurl='https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv' df=pd.read_csv(url,delimiter=',',header='infer')df_interest=df.loc[ df['Country/Region'].isin(['UnitedKingdom','US','Italy','Germany']) &df['Province/State'].isna()]df_interest.rename( index=lambdax:df_interest.at[x,'Country/Region'],inplace=True) df1=df_interest.transpose()df1=df1.drop(['Province/State','Country/Region','Lat','Long']) df1=df1.loc[(df1!=0).any(1)] df1.index=pd.to_datetime(df1.index)绘制三种常见动态图表动态曲线图

88635180-5fd2-11eb-8b86-12bb97331649.gif

如下所示,首先需要做的第一件事是定义图的各项,这些基础项设定之后就会保持不变。它们包括:创建 figure 对象,x 标和 y 标,设置线条颜色和 figure 边距等:

importnumpyasnp importmatplotlib.pyplotaspltcolor=['red','green','blue','orange'] fig=plt.figure() plt.xticks(rotation=45,ha="right",rotation_mode="anchor")#rotatethex-axisvalues plt.subplots_adjust(bottom=0.2,top=0.9)#ensuringthedates(onthex-axis)fitinthescreen plt.ylabel('NoofDeaths') plt.xlabel('Dates') 接下来设置 curve 函数,进而使用 .FuncAnimation 让它动起来: defbuildmebarchart(i=int): plt.legend(df1.columns) p=plt.plot(df1[:i].index,df1[:i].values)#noteitonlyreturnsthedataset,uptothepointi foriinrange(0,4): p[i].set_color(color[i])#setthecolourofeachcurveimportmatplotlib.animationasani animator=ani.FuncAnimation(fig,buildmebarchart,interval=100) plt.show()动态饼状图

8c06c506-5fd2-11eb-8b86-12bb97331649.gif

可以观察到,其代码结构看起来与线型图并无太大差异,但依旧有细小的差别。

importnumpyasnp importmatplotlib.pyplotaspltfig,ax=plt.subplots() explode=[0.01,0.01,0.01,0.01]#popouteachslicefromthepiedefgetmepie(i): defabsolute_value(val):#turn%backtoanumber a=np.round(val/100.*df1.head(i).max().sum(),0) returnint(a) ax.clear() plot=df1.head(i).max().plot.pie(y=df1.columns,autopct=absolute_value,label='',explode=explode,shadow=True) plot.set_title('TotalNumberofDeaths '+str(df1.index[min(i,len(df1.index)-1)].strftime('%y-%m-%d')),fontsize=12)importmatplotlib.animationasani animator=ani.FuncAnimation(fig,getmepie,interval=200) plt.show() 主要区别在于,动态饼状图的代码每次循环都会返回一组数值,但在线型图中返回的是我们所在点之前的整个时间序列。返回时间序列通过 df1.head(i) 来实现,而. max()则保证了我们仅获得最新的数据,因为流行病导致死亡的总数只有两种变化:维持现有数量或持续上升。 df1.head(i).max()动态条形图

8cdb4c72-5fd2-11eb-8b86-12bb97331649.gif

创建动态条形图的难度与上述两个案例并无太大差别。在这个案例中,作者定义了水平和垂直两种条形图,读者可以根据自己的实际需求来选择图表类型并定义变量栏。 fig=plt.figure() bar=''defbuildmebarchart(i=int): iv=min(i,len(df1.index)-1)#theloopiteratesanextraonetime,whichcausesthedataframestogooutofbounds.Thiswastheeasiest(mostlazy)waytosolvethis:) objects=df1.max().index y_pos=np.arange(len(objects)) performance=df1.iloc[[iv]].values.tolist()[0] ifbar=='vertical': plt.bar(y_pos,performance,align='center',color=['red','green','blue','orange']) plt.xticks(y_pos,objects) plt.ylabel('Deaths') plt.xlabel('Countries') plt.title('DeathsperCountry '+str(df1.index[iv].strftime('%y-%m-%d'))) else: plt.barh(y_pos,performance,align='center',color=['red','green','blue','orange']) plt.yticks(y_pos,objects) plt.xlabel('Deaths') plt.ylabel('Countries')animator=ani.FuncAnimation(fig,buildmebarchart,interval=100)plt.show()保存动画图 在制作完成后,存储这些动态图就非常简单了,可直接使用以下代码: animator.save(r'C: empmyfirstAnimation.gif')责任编辑:lq

原文标题:让数据动起来:Python动态图表制作!

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

扫一扫,分享给好友

复制链接分享 评论

发布评论请先 登录

相关推荐

华为与Zain KSA签署谅解备忘录 曙光计算服务构建算力网络体系 目前,河南师范大学某课题组已经完成tracer2d算法在Fortran环境下的测试运行,证实了tra.... 发表于 03-17 10:39 • 44次 阅读 东软通过TISAX评审 华为获新加坡资媒局授予数据保护信任标志 全球领先的ICT (信息与通信)基础设施和智能终端提供商华为在新加坡的子公司华为国际(Huawei .... 的头像 lhl545545 发表于 03-17 09:15 • 136次 阅读 RFE递归特征消除特征排序 本文主要从股市数据变量的特征分布及特征重要性两个角度对数据进行分析。 的头像 Linux爱好者 发表于 03-16 17:26 • 578次 阅读 从 yield 开始入门python协程 简单介绍 yield本篇文章会先向你介绍一个陌生的 Python 关键词,他和 return 就像一对新兄弟,有相似之处,又各有不同。 相似的... 发表于 03-16 16:21 • 41次 阅读 从yield开始入门python协程 本篇文章会先向你介绍一个陌生的 Python 关键词,他和 return 就像一对新兄弟,有相似之处.... 的头像 python爬虫知识分享 发表于 03-16 16:20 • 158次 阅读 线程池创建的两种方法 1. 使用内置模块在使用多线程处理任务时也不是线程越多越好,由于在切换线程的时候,需要切换上下文环境,依然会造成cpu的大量开... 发表于 03-16 16:15 • 39次 阅读 python创建线程池的两种方法 在使用多线程处理任务时也不是线程越多越好,由于在切换线程的时候,需要切换上下文环境,依然会造成cpu.... 的头像 python爬虫知识分享 发表于 03-16 16:15 • 153次 阅读 时间序列分析和预测基础理论知识 今天给大家带来一篇实战案例,本案例旨在运用之前学习的时间序列分析和预测基础理论知识,用一个基于交通数.... 的头像 数据分析与开发 发表于 03-16 14:05 • 87次 阅读 重复值处理的常用方法 重复值处理主要涉及两个部分,一个是找出重复值,第二个是删除重复值,也就是根据自己设定的条件进行删除操.... 的头像 数据分析与开发 发表于 03-16 13:55 • 91次 阅读 详解Nginx高性能的HTTP和反向代理服务器 Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占用内存少,并发能力强,事实上 Ngi.... 的头像 Linux爱好者 发表于 03-16 11:23 • 119次 阅读 使用Python实现五个自动化场景 相比大家都听过自动化生产线、自动化办公等词汇,在没有人工干预的情况下,机器可以自己完成各项任务,这大.... 的头像 Linux爱好者 发表于 03-16 11:13 • 92次 阅读 如何打造数据驱动型企业?亚马逊云科技来答疑解惑 我们经常被问及什么是数据驱动型组织?数据驱动可以加速哪些业务成果?什么是维持数据驱动型创新所需的运营.... 的头像 华夏大视野 发表于 03-16 10:22 • 91次 阅读 CPU负荷重服务器数据延迟高怎么办 满载的应该是大脑而非机器。“东数西算”工程背景下,各应用场景对数据处理能力的考量和需求日新月异。这带.... 发表于 03-16 10:19 • 7次 阅读 曙光助力车企应对海量多类型数据 龙芯中科推出智慧访客解决方案 近日,全球光学解决方案的领导者艾迈斯欧司朗(瑞士证券交易所股票代码:AMS)宣布推出全新AS7343.... 发表于 03-16 10:15 • 456次 阅读 使用AioHttp异步抓取火星图片 让我们从一个简单的应用程序开始,只是为了启动和运行aiohttp。首先,创建一个新的virtuale.... 的头像 马哥Linux运维 发表于 03-16 09:58 • 108次 阅读 LAN8720A无法接收数据是为什么?怎么解决?   1.环境使用RT-Studio创建的标准F2工程,已经修改了HSE时钟。   RT版本:4.0.3   STM32CubeMX版本6.4 ... 发表于 03-16 09:34 • 455次 阅读 如何用python爬取抖音app数据 记录一下如何用python爬取app数据,本文以爬取抖音视频app为例。 的头像 马哥Linux运维 发表于 03-16 09:07 • 120次 阅读 从C 到 matlab 到 FPGA,如何实现CNN的项目 经过了前面的开胃菜,项目正式开始。一步步讲解这个模型怎么玩起来的。从C 到 matlab 到 FPG.... 的头像 FPGA攻城狮之家 发表于 03-15 17:13 • 601次 阅读 VSC8658-DS-r41-VMDS-10242数据手册.pdf VSC8658-DS-r41-VMDS-10242数据手册.pdf 发表于 03-15 16:48 • 27次 阅读 python创建多线程的两种方法 1. 用函数创建多线程在Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多线程。 threading.... 发表于 03-15 16:47 • 917次 阅读 python创建多线程的两种方法 1. 用函数创建多线程 在Python3中,Python提供了一个内置模块 threading.Th.... 的头像 python爬虫知识分享 发表于 03-15 16:47 • 278次 阅读 python多线程和多进程对比 1. 基本概念在开始讲解理论知识之前,先过一下几个基本概念。虽然咱是进阶教程,但我也希望写得更小白,更通俗易懂。 串行:一个... 发表于 03-15 16:42 • 436次 阅读 python多线程和多进程的对比 1. 基本概念 在开始讲解理论知识之前,先过一下几个基本概念。虽然咱是进阶教程,但我也希望写得更小白.... 的头像 python爬虫知识分享 发表于 03-15 16:42 • 273次 阅读 python多线程和多进程的对比 手把手教你使用Python提取快递信息 现在快递遍布生活的角角落落,一个快递其实是信息的集合体,里面包含大量的物流信息。在面对一大堆快递信息需要我们进行按省份... 发表于 03-15 16:37 • 717次 阅读 基于Python语言的RFM模型讲解 上面步骤可以知道,我们需要有RFM三个维度,根据我们在业务分析方法课程中学到的,业务分析模型离不开指.... 的头像 数据分析与开发 发表于 03-15 15:38 • 150次 阅读 Smartbi移动BI让数据决策尽在掌握 技术的更迭,商业智能化管理越来越被重视,移动BI的概念也被提起。移动BI是指用户可以随时随地获取所需.... 发表于 03-15 15:21 • 8次 阅读 I2C通信理解与三种IIC数据帧传递过程 很多朋友在进行IIC通信协议开发的时候比较迷茫,可能长时间没有用了,就有所忘却,也算正常,不过如果重.... 的头像 FPGA之家 发表于 03-15 10:29 • 96次 阅读 宁德时代获十大“国品之光”品牌 利亚德携手伙伴举行云签约仪式 近期,宁德时代荣获第二届“中国品牌强国盛典”十大“国品之光”品牌殊荣。曾毓群董事长出席领奖并接受采访.... 的头像 lhl545545 发表于 03-15 09:57 • 340次 阅读 理解python模块的缓存 在一个模块内部重复引用另一个相同模块,实际并不会导入两次,原因是在使用关键字 import 导入模块时,它会先检索 sys.modules 里... 发表于 03-14 16:42 • 1018次 阅读 一文理解python模块的缓存 在一个模块内部重复引用另一个相同模块,实际并不会导入两次,原因是在使用关键字 import 导入模块.... 的头像 python爬虫知识分享 发表于 03-14 16:42 • 146次 阅读 python 包导入的三个冷门知识点 1. 使用 __all__ 控制可被导入的变量使用 from module import * 默认情况下会导入 module 里的所有变量,若你只想从模块中导入其... 发表于 03-14 16:33 • 1298次 阅读 关于python包导入的三个冷门知识点 使用 from module import * 默认情况下会导入 module 里的所有变量,若你只.... 的头像 python爬虫知识分享 发表于 03-14 16:33 • 168次 阅读 使用Minitab统计分析软件完成基准可靠性评估 预估基准可靠性将帮助我们集中精力进行可靠性分析,确定必要的故障预防措施,以及确定潜在的成本和收益。 发表于 03-14 13:15 • 7次 阅读 使用Minitab统计分析软件完成基准可靠性评估 昇思MindSpore全场景AI框架1.6版本的关键特性 此版本中昇思MindSpore全场景AI框架易用性不断改进,提升了开发效率,控制流性能提升并支持副作.... 的头像 华为计算 发表于 03-14 13:06 • 156次 阅读 昇思MindSpore全场景AI框架1.6版本的关键特性 三维点云数据的两种结构Kdtree和Octree 三维点云数据用于表征目标表面的海量点集合,但是各个离散点之间并没有拓扑关系,一般通过建立点云的空间索.... 的头像 机器视觉智能检测 发表于 03-14 10:57 • 77次 阅读 关于堆和栈的理论知识 栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结.... 的头像 嵌入式ARM 发表于 03-12 10:54 • 263次 阅读 数之联聚焦泛半导体行业的AI+工业检测 2018年,成都数之联科技股份有限公司(下称“数之联”)接到了厦门某电子集团的电话,让他们迅速准备一.... 发表于 03-11 16:31 • 8次 阅读 图数据平台Neo4j线上直播将于3月23日举行 随着大数据、高性能计算、虚拟仿真、大数据计算的快速发展,网络和IT基础架构的规模和复杂性管理数据库比.... 发表于 03-11 16:08 • 12次 阅读 pip 的超全使用指南 1. 查询软件包查询当前环境安装的所有软件包 [code]$ pip list[/code]查询 pypi 上含有某名字的包 [code]$ pip search pkg[/co... 发表于 03-11 16:03 • 3976次 阅读 一文了解pip的超全使用指南 由于默认情况下,wheel 包的平台是运行 pip download 命令 的平台,所以可能出现平台.... 的头像 python爬虫知识分享 发表于 03-11 16:03 • 221次 阅读 利用AI+大数据技术提升先进制造产品良率 良率在工业生产中占据非常重要的地位,在某些高端制造行业,良率管理能力甚至可以被认为是企业核心竞争力。.... 发表于 03-11 15:57 • 16次 阅读 python常规包与命名空间包 python常规包与命名空间包1. 常规包在 Python 3.3 之前或者说 Python 2 中,一个包想要被导入使用,那么该包内必须要有 __init... 发表于 03-11 15:46 • 2096次 阅读 详解python常规包与命名空间包 python常规包与命名空间包 1. 常规包 在 Python 3.3 之前或者说 Python 2.... 的头像 python爬虫知识分享 发表于 03-11 15:46 • 228次 阅读 常见的通信协议有哪些 协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计.... 的头像 strongerHuang 发表于 03-11 13:58 • 265次 阅读 串行通信的应用场合 通信的种类和方式有很多,今天为大家分享一下通信中常见的同步、异步,单工、双工通信的区别。 的头像 strongerHuang 发表于 03-11 13:54 • 192次 阅读 高性能IRT的组态 在巡视窗口中,选择“属性 > 常规 > PROFINET > 管理 > 同步域 > 同.... 的头像 机器人及PLC自动化应用 发表于 03-11 11:14 • 192次 阅读 高光谱遥感在乐山文物保护中的应用 高光谱遥感,是高光谱分辨率遥感测量的简称,它是从感兴趣的物体中获取许多比较窄、光谱连续的影像数据,并.... 发表于 03-11 10:32 • 6次 阅读 智齿科技完成1亿美金D轮融资 Semtech发布单向4通道解决方案 近日,一体化客户联络解决方案提供商智齿科技宣布完成1亿美金D轮融资。本轮融资由软银愿景基金2期领投,.... 发表于 03-11 09:56 • 1032次 阅读 详解Android JankStats的alpha版本   卡顿 (名词): 指应用性能糟糕,可能导致丢帧、界面动画不连贯和用户体验不佳等问题。请参阅 "不.... 的头像 谷歌开发者 发表于 03-11 09:46 • 170次 阅读 NÜWA多模态模型支持八大视觉生成与编辑任务 小编说:“自然语言”正在越来越经常地出现在我们的日常生活中。你有没有想象过,我们有一天可以使用自然语.... 的头像 微软科技 发表于 03-11 09:23 • 165次 阅读 微软多管齐下,构建现代化数据安全架构 小编说:面对后疫情时代的新常态发展,企业想持续发展不仅要克服频繁的供应链冲击和人才短缺等挑战,还要面.... 的头像 微软科技 发表于 03-11 09:11 • 166次 阅读 CAN FD如何提高通信效率 CAN的应用越来越广,汽车电子、工业控制、大型仪器设备等随处可见CAN总线。 的头像 strongerHuang 发表于 03-10 17:59 • 457次 阅读 python花式导包的八种方法 python花式导包的八种方法 1. 直接 import 人尽皆知的方法,直接导入即可 import.... 的头像 python爬虫知识分享 发表于 03-10 16:48 • 197次 阅读 健康码扫码一体机的主要功能及产品特点 防疫测温扫码一体机是防控一体化管理下保障人员健康出行的一道利器,也是智慧防疫解决方案应用中不可或缺的.... 发表于 03-10 16:29 • 24次 阅读 python安装第三方包的八种方法 python安装第三方包的八种方法 1. 使用 easy_install easy_install .... 的头像 python爬虫知识分享 发表于 03-10 16:27 • 179次 阅读 Pulse工具产品介绍与其功能详解 上周,【虹科云课堂】数据管理与可视化解决方案前两期课程圆满结束,感谢大家的观看与支持。虹小科为大家整.... 的头像 广州虹科电子科技有限公司 发表于 03-10 13:03 • 179次 阅读 如何提升电梯维保企业安全管理水平 据统计,2019年全年电梯生产总量有超过100万台,全国在用量将突破700万台。发达国家,一个电梯维.... 发表于 03-10 10:44 • 18次 阅读 基于以太网的开放式实时现场总线系统 EtherCAT是一种基于以太网的开放式实时现场总线系统。EtherCAT的研发目标是将以太网应用于.... 的头像 Excelpoint世健 发表于 03-10 10:35 • 263次 阅读 基于以太网的开放式实时现场总线系统


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3